package com.dog.framework.core.enums;

/**
 * 全局错误码枚举
 * 0-999 系统异常编码保留
 * <p>
 * 一般情况下，使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
 * 虽然说，HTTP 响应状态码作为业务使用表达能力偏弱，但是使用在系统层面还是非常不错的
 * 比较特殊的是，因为之前一直使用 0 作为成功，就不使用 200 啦。
 *
 */

public enum ResponseCodeEnum {

    SUCCESS(0, "成功"),

    // ========== 客户端错误段 ==========
    BAD_REQUEST(400, "请求参数不正确"),
    UNAUTHORIZED(401, "账号未登录"),
    FORBIDDEN(403, "没有该操作权限"),
    NOT_FOUND(404, "请求未找到"),
    METHOD_NOT_ALLOWED(405, "请求方法不正确"),
    LOCKED(423, "请求失败，请稍后重试"), // 并发请求，不允许
    TOO_MANY_REQUESTS(429, "请求过于频繁，请稍后重试"),

    // ========== 服务端错误段 ==========
    INTERNAL_SERVER_ERROR(500, "系统异常"),
    SERVER_FALLBACK(3001, "服务降级了........"),


    // ========== 自定义错误段 ==========
    REPEATED_REQUESTS(900, "重复请求，请稍后重试"), // 重复请求
    USER_NOT_EXISTS_ERROR(902, "用户不存在错误"),
    UNKNOWN(999, "未知错误"),


    CLIENT_AUTHENTICATION_FAILED(1001, "客户端认证失败"),
    INVALID_TOKEN(1004,"无效的token"),

    MAIL_CONTENT_NOT_EMPTY(10088, "mail_content_not_empty"),
    MAIL_TOPIC_NOT_EMPTY(10089, "mail_topic_not_empty"),
    MAIL_RECEIVER_NOT_EMPTY(10091, "mail_receiver_not_empty");


    private Integer code;
    private String msg;

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    ResponseCodeEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }


    public static ResponseCodeEnum valueOf(Integer code) {
        for (ResponseCodeEnum value : values()) {
            if (value.code.equals(code)) {
                return value;
            }
        }
        return null;
    }
}
